/**
 * @author Laboratio Av I
 * @since 18/04/2012 14:03:56
 */
package ar.edu.utn.frgp.banco.dao.impl;

import java.sql.Connection;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;




import ar.edu.utn.frgp.banco.dao.PagoServiciosDao;
import ar.edu.utn.frgp.banco.dao.connection.ConnectionHandler;
import ar.edu.utn.frgp.banco.dao.connection.IConnectionHandler;


import ar.edu.utn.frgp.banco.domain.Cuenta;
import ar.edu.utn.frgp.banco.domain.PagoServicio;
import ar.edu.utn.frgp.banco.exceptions.DataAccessException;
import ar.edu.utn.frgp.banco.utils.ServiciosMostrar;


public class PagoServiciosDaoImpl implements PagoServiciosDao {
	
	public void altaPagoServicio(PagoServicio pagoservicio) throws DataAccessException {

		PreparedStatement ps = null;
		
		IConnectionHandler handler = new ConnectionHandler();
		Connection cn = handler.getConnection();
		
		try {
			
			java.util.Date utilDate = new java.util.Date();
			
			java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

							
			ps = cn.prepareStatement("INSERT INTO pagoservicios VALUES(?,?,?,?)");
			
			ps.setInt   (1, pagoservicio.getIdpagoservicio());
			ps.setInt   (2, pagoservicio.getIdservicio());
			ps.setInt   (3, pagoservicio.getNrocuenta());
			ps.setDate  (4, sqlDate);
			
			
			ps.executeUpdate();
			
		} catch (SQLException e) {
			throw new DataAccessException(e);
		} finally {
			handler.closeResources(ps, cn);
		}

	}
	
	public List<PagoServicio> traerTodosLosPagos() throws DataAccessException {
		  Statement st = null;
	      ResultSet rs = null;
			
			IConnectionHandler handler = new ConnectionHandler();
			Connection cn = handler.getConnection();
			
			List<PagoServicio> pagoservicios = new ArrayList<PagoServicio>();
			
			try {
				st = cn.createStatement();
				rs = st.executeQuery("SELECT * FROM pagoservicios");
				
				PagoServicio regpago = null;
				
				while (rs.next()) {
					
					regpago = new PagoServicio();
					
					regpago.setIdpagoservicio(rs.getInt("idpagoservicio"));
					regpago.setIdservicio(rs.getInt("idservicio"));
					regpago.setNrocuenta(rs.getInt("nrocuenta"));
					regpago.setFecha(rs.getDate("fecha"));
					
					pagoservicios.add(regpago);
				}
						
							
			} catch (SQLException e) {
				System.out.println("Error al crear tablas.");
				e.printStackTrace();			
			} finally {
				handler.closeResources(st, cn);
			}
		return pagoservicios;
	}

	
	public List<ServiciosMostrar> traerTodosLosPagosPorCuentaModificado(Cuenta cu)throws DataAccessException{
		 Statement st = null;
	      ResultSet rs = null;
			
			IConnectionHandler handler = new ConnectionHandler();
			Connection cn = handler.getConnection();
			
			List<ServiciosMostrar> pagoservicios = new ArrayList<ServiciosMostrar>();
			
			try {
				st = cn.createStatement();
				rs = st.executeQuery("SELECT idpagoservicio,nrocuenta,descripcion,fecha FROM pagoservicios INNER JOIN servicios ON pagoservicios.idservicio = servicios.idservicio where pagoservicios.nrocuenta =" +cu.getNrocuenta()+"");

				ServiciosMostrar regpago = null;
				
				while (rs.next()) {
					
					regpago = new ServiciosMostrar();
					
					regpago.setIdpagoservicio(rs.getInt("idpagoservicio"));
					regpago.setNrocuenta(rs.getInt("nrocuenta"));
					regpago.setDescripcion(rs.getString("descripcion"));
					regpago.setFecha(rs.getDate("fecha"));
					
					pagoservicios.add(regpago);
				}
						
							
			} catch (SQLException e) {
				System.out.println("Error al crear tablas.");
				e.printStackTrace();			
			} finally {
				handler.closeResources(st, cn);
			}
		return pagoservicios;
		
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}